package com.hifar.test.collectdata.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hifar.test.collectdata.pojo.CollectData;
import com.hifar.test.collectdata.pojo.VO.ClimateCollectDataVO;
import com.hifar.test.collectdata.pojo.VO.ClimateCollectionData;
import com.hifar.test.collectdata.pojo.VO.DynamicsCollectDataVO;
import com.hifar.test.collectdata.pojo.VO.EquipRunStatusCollectDataVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 采集数据表 mapper接口
 * </p>
 *
 * @author wangkepeng
 * @since 2024-12-17 11:08:21
 */
@Mapper
public interface CollectDataMapper extends BaseMapper<CollectData> {
    /**
     * 查询表是否存在
     *
     * @param schemaName 数据库名
     * @param tableName  表名称
     * @return
     */
    int queryTable(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

    /**
     * @param page               分页
     * @param existTableNameList 表名称
     * @param startTime          开始时间
     * @param endTime            结束时间
     * @return
     */
    Page<ClimateCollectionData> pageData(Page<ClimateCollectionData> page
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startTime
            , @Param("endTime") LocalDateTime endTime);

    /**
     * @param existTableNameList 表名称
     * @param startTime          开始时间
     * @param endTime            结束时间
     * @return
     */
    List<ClimateCollectionData> listData(
            @Param("dbType") String dbType,
            @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startTime
            , @Param("endTime") LocalDateTime endTime);

    /**
     * 批量查询数据
     *
     * @param tableName  表名
     * @param insertList 插入数据
     */
    void batchInsertData(@Param("tableName") String tableName
            , @Param("insertList") List<CollectData> insertList);


    /**
     * 分页查询气候设备运行记录
     *
     * @param existTableNameList 表名称
     * @param startDateTime      开始时间
     * @param endDateTime        结束时间
     * @return
     */
    Page<ClimateCollectDataVO> pageClimateData(
            Page page,
            @Param("dbType") String dbType
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);

    /**
     * 分页查询气候设备运行记录
     *
     * @param existTableNameList 表名称
     * @param startDateTime      开始时间
     * @param endDateTime        结束时间
     * @return
     */
    List<ClimateCollectDataVO> listClimateData(
            @Param("dbType") String dbType
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);

    /**
     * 分页查询力学设备运行记录
     *
     * @param existTableNameList 表名称
     * @param startDateTime      开始时间
     * @param endDateTime        结束时间
     * @return
     */
    Page<DynamicsCollectDataVO> pageDynamicsData(
            Page page,
            @Param("dbType") String dbType
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);

    /**
     * 分页查询力学设备运行记录
     *
     * @param existTableNameList 表名称
     * @param startDateTime      开始时间
     * @param endDateTime        结束时间
     * @return
     */
    List<DynamicsCollectDataVO> listDynamicsData(
            @Param("dbType") String dbType
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);

    /**
     * 查询具体数据id
     *
     * @param tableName
     * @param tagName
     * @param idList
     * @return
     */
    String queryTagId(
            @Param("tableName") String tableName,
            @Param("tagName") String tagName,
            @Param("idList") List<String> idList);
    
    String queryTagIdAndDbType(
    		  @Param("dbType") String dbType,
            @Param("tableName") String tableName,
            @Param("tagName") String tagName,
            @Param("idList") List<String> idList);

    /**
     * 新增一条采集数据
     *
     * @param tableName   表名称
     * @param collectData 采集数据
     */
    void insertData(@Param("dbType") String dbType, @Param("tableName") String tableName,
                    @Param("data") CollectData collectData);

    /**
     * 修改采集数据
     *
     * @param tableName 表名称
     * @param tagValue  value
     * @param id        id
     */
    void editData(@Param("dbType") String dbType, @Param("tableName") String tableName,
                  @Param("tagValue") String tagValue,
                  @Param("id") String id);

    /**
     * 删除设备运行记录
     *
     * @param tableName 表名称
     * @param idList    idList
     */
    void deleteCollectData(@Param("dbType") String dbType, @Param("tableName") String tableName,
                           @Param("idList") List<String> idList);

    /**
     * 查询设备运行记录
     * @param dbType
     * @param existTableNameList
     * @param startDateTime
     * @param endDateTime
     * @return
     */
    List<EquipRunStatusCollectDataVO> listRunRecordData(@Param("dbType") String dbType
            , @Param("tableNameList") List<String> existTableNameList
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);

    /**
     * 查询当前设备实时采集值
     * @param dbType
     * @param tableName
     * @param startDateTime
     * @param endDateTime
     * @return
     */
    List<CollectData> queryRunRecordData(@Param("dbType") String dbType
            , @Param("tableName") String tableName
            , @Param("startTime") LocalDateTime startDateTime
            , @Param("endTime") LocalDateTime endDateTime);
}